﻿Shader "GJ/Blur"
{
    Properties
    {
        [PerRendererData] _MainTex("MainTex",2D) = "white"{}
        _Color("Color",Color) = (1,1,1,1)
        _Radius("半径",Range(0,10)) = 0
        _Alpha("Alpha",Range(0,1)) = 0
    }
//    SubShader
//    {
//        Tags { "RenderType"="Opaque" }
//        LOD 100
//
//        Pass
//        {
//            CGPROGRAM
//            #pragma vertex vert
//            #pragma fragment frag
//            #include "UnityCG.cginc"
//            struct appdata
//            {
//                float4 vertex : POSITION;
//                float2 uv : TEXCOORD0;
//            };
//
//            struct v2f
//            {
//                float2 uv : TEXCOORD0;
//                float4 vertex : SV_POSITION;
//            };
//
//		sampler2D _MainTex;
//		float _Radius;
//
//            v2f vert (appdata v)
//            {
//                v2f o;
//                o.vertex = UnityObjectToClipPos(v.vertex);
//                o.uv = v.uv;
//                return o;
//            }
//
//            //9层模糊（图像纹理，图像UV，模糊半径）
//            float4 BlurLayer9(sampler2D ColorTex,float2 UV,float Radius)
//            {
//                //原始数据
//                float4 outTex = 0;
//
//                //中心点
//                outTex +=tex2D(ColorTex, UV+float2(0,0)*Radius)*0.2;
//    
//                //右、左、上、下
//                outTex +=tex2D(ColorTex, UV+float2(1,0)*Radius)*0.1;
//                outTex +=tex2D(ColorTex, UV+float2(-1,0)*Radius)*0.1;
//                outTex +=tex2D(ColorTex, UV+float2(0,1)*Radius)*0.1;
//                outTex +=tex2D(ColorTex, UV+float2(0,-1)*Radius)*0.1;
//
//                //右上、左下、左上、右下
//                outTex +=tex2D(ColorTex, UV+float2(0.7071,0.7071)*Radius)*0.1;
//                outTex +=tex2D(ColorTex, UV+float2(-0.7071,-0.7071)*Radius)*0.1;
//                outTex +=tex2D(ColorTex, UV+float2(-0.7071,0.7071)*Radius)*0.1;
//                outTex +=tex2D(ColorTex, UV+float2(0.7071,-0.7071)*Radius)*0.1;
//
//                return outTex;
//            }
//
//            //5层模糊（图像纹理，图像UV，模糊半径）
//            float4 BlurLayer5(sampler2D ColorTex,float2 UV,float Radius)
//			{
//			  float4 outTex = 0;
//              //中心图像
//				outTex +=tex2D(ColorTex, UV+float2(0,0)*Radius)*0.2;
//
//                //右、左、上、下
//                outTex +=tex2D(ColorTex, UV+float2(1,0)*Radius)*0.2;
//                outTex +=tex2D(ColorTex, UV+float2(-1,0)*Radius)*0.2;
//                outTex +=tex2D(ColorTex, UV+float2(0,1)*Radius)*0.2;
//                outTex +=tex2D(ColorTex, UV+float2(0,-1)*Radius)*0.2;
//
//			 return outTex;
//			}
//
//
//            fixed4 frag (v2f i) : SV_Target
//            {
//                fixed4 col = 0;
//				col = BlurLayer5(_MainTex,i.uv,_Radius*0.1);
//                return col;
//            }
//            ENDCG
//        }
//    }

    SubShader
    {
        Tags {
            "Queue"="Transparent"
            "IgnoreProjector"="True"
            "RenderType"="Transparent"
        }
        Cull Off Lighting Off ZWrite Off
        Blend SrcAlpha OneMinusSrcAlpha
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"


            fixed4 _Color;
            sampler2D _MainTex;
            float4 _MainTex_TexelSize;

            float _Radius;
            float _Alpha;
            struct a2v
            {
                float4 vertex : POSITION;
                fixed4 color  : COLOR;
                float2 uv     : TEXCOORD0;
            };

            struct v2f
            {
                float4 pos   : SV_POSITION;
                fixed4 color : COLOR;
                float2 uv    : TEXCOORD0;
            };

            fixed4 Blur (sampler2D tex, half2 uv, half2 blurSize)
            {
                int KERNEL_SIZE = 3;

                float4 o  = 0;
                float sum = 0;
                float weight;
                half2 texcood;
                for(int x = -KERNEL_SIZE/2; x <= KERNEL_SIZE/2; x++)
                {
                    for(int y = -KERNEL_SIZE/2; y <= KERNEL_SIZE/2; y++)
                    {
                        texcood = uv;
                        texcood.x += blurSize.x * x;
                        texcood.y += blurSize.y * y;
                        weight = 1.0/(abs(x)+abs(y)+2);
                        o += tex2D(tex, texcood)*weight;
                        sum += weight;
                    }
                }
                return o / sum;
            }

            v2f vert(a2v v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.color = v.color;
                o.uv = v.uv;
                return o;
            }

            fixed4 frag(v2f i) : SV_TARGET
            {
                fixed4 c = tex2D(_MainTex, i.uv);
                fixed4 col = Blur(_MainTex,i.uv,_Radius * _MainTex_TexelSize.xy);
                col.a += _Alpha;
                // return c.a == 0 ? c : col;
                return col;
            }

            ENDCG
        }
    }
}
